// $ANTLR 3.4 C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g 2012-02-06 17:10:15

	package script.grammar;
	
	import script.grammar.symbol.Symbol;
	import script.grammar.symbol.FieldSymbol;
	import script.grammar.symbol.VariableSymbol;


import org.antlr.runtime.*;
import org.antlr.runtime.tree.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;

import org.antlr.stringtemplate.*;
import org.antlr.stringtemplate.language.*;
import java.util.HashMap;
@SuppressWarnings({"all", "warnings", "unchecked"})
public class LocScriptGen extends TreeParser {
    public static final String[] tokenNames = new String[] {
        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "AND", "ARRAY_ACCESS", "ASSIGN", "BIT_AND", "BIT_NEG", "BIT_OR", "BLOCK", "CLOSE_BRACE", "CLOSE_BRACK", "CLOSE_PARENS", "COND_OP", "DEF", "DIV", "DIV_ASSIGN", "EQUALS", "EXPR", "FALSE", "FILTER", "FLOAT", "FOR", "GREATER_THAN", "GREATER_THAN_EQUALS", "ID", "INT", "LESS_THAN", "LESS_THAN_EQUALS", "MEM_ACCESS", "MINUS", "MINUS_ASSIGN", "MOD", "MULT", "MULT_ASSIGN", "NEG", "NOT", "NOT_EQUALS", "OPEN_BRACE", "OPEN_BRACK", "OPEN_PARENS", "OR", "PLUS", "PLUS_ASSIGN", "POST_DEC", "POST_INC", "PRE_DEC", "PRE_INC", "RETURN", "SHIFT_LEFT", "SHIFT_RIGHT", "THIS", "TRUE", "U_SHIFT_RIGHT", "VAR", "WS", "XOR", "'++'", "','", "'--'", "':'", "';'", "'?'"
    };

    public static final int EOF=-1;
    public static final int T__58=58;
    public static final int T__59=59;
    public static final int T__60=60;
    public static final int T__61=61;
    public static final int T__62=62;
    public static final int T__63=63;
    public static final int AND=4;
    public static final int ARRAY_ACCESS=5;
    public static final int ASSIGN=6;
    public static final int BIT_AND=7;
    public static final int BIT_NEG=8;
    public static final int BIT_OR=9;
    public static final int BLOCK=10;
    public static final int CLOSE_BRACE=11;
    public static final int CLOSE_BRACK=12;
    public static final int CLOSE_PARENS=13;
    public static final int COND_OP=14;
    public static final int DEF=15;
    public static final int DIV=16;
    public static final int DIV_ASSIGN=17;
    public static final int EQUALS=18;
    public static final int EXPR=19;
    public static final int FALSE=20;
    public static final int FILTER=21;
    public static final int FLOAT=22;
    public static final int FOR=23;
    public static final int GREATER_THAN=24;
    public static final int GREATER_THAN_EQUALS=25;
    public static final int ID=26;
    public static final int INT=27;
    public static final int LESS_THAN=28;
    public static final int LESS_THAN_EQUALS=29;
    public static final int MEM_ACCESS=30;
    public static final int MINUS=31;
    public static final int MINUS_ASSIGN=32;
    public static final int MOD=33;
    public static final int MULT=34;
    public static final int MULT_ASSIGN=35;
    public static final int NEG=36;
    public static final int NOT=37;
    public static final int NOT_EQUALS=38;
    public static final int OPEN_BRACE=39;
    public static final int OPEN_BRACK=40;
    public static final int OPEN_PARENS=41;
    public static final int OR=42;
    public static final int PLUS=43;
    public static final int PLUS_ASSIGN=44;
    public static final int POST_DEC=45;
    public static final int POST_INC=46;
    public static final int PRE_DEC=47;
    public static final int PRE_INC=48;
    public static final int RETURN=49;
    public static final int SHIFT_LEFT=50;
    public static final int SHIFT_RIGHT=51;
    public static final int THIS=52;
    public static final int TRUE=53;
    public static final int U_SHIFT_RIGHT=54;
    public static final int VAR=55;
    public static final int WS=56;
    public static final int XOR=57;

    // delegates
    public TreeParser[] getDelegates() {
        return new TreeParser[] {};
    }

    // delegators


    public LocScriptGen(TreeNodeStream input) {
        this(input, new RecognizerSharedState());
    }
    public LocScriptGen(TreeNodeStream input, RecognizerSharedState state) {
        super(input, state);
    }

protected StringTemplateGroup templateLib =
  new StringTemplateGroup("LocScriptGenTemplates", AngleBracketTemplateLexer.class);

public void setTemplateLib(StringTemplateGroup templateLib) {
  this.templateLib = templateLib;
}
public StringTemplateGroup getTemplateLib() {
  return templateLib;
}
/** allows convenient multi-value initialization:
 *  "new STAttrMap().put(...).put(...)"
 */
public static class STAttrMap extends HashMap {
  public STAttrMap put(String attrName, Object value) {
    super.put(attrName, value);
    return this;
  }
  public STAttrMap put(String attrName, int value) {
    super.put(attrName, new Integer(value));
    return this;
  }
}
    public String[] getTokenNames() { return LocScriptGen.tokenNames; }
    public String getGrammarFileName() { return "C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g"; }


    	Class<?> type;
    	String className;
    	
    	public LocScriptGen(TreeNodeStream in, Class<?> type, String className) {
    		this(in);
    		this.type = type;
    		this.className = className;
    	}


    public static class startFilter_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };


    // $ANTLR start "startFilter"
    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:28:1: startFilter : ^( FILTER body ) -> filterScript(className=classNametypeName=type.getName()body=$body.st);
    public final LocScriptGen.startFilter_return startFilter() throws RecognitionException {
        LocScriptGen.startFilter_return retval = new LocScriptGen.startFilter_return();
        retval.start = input.LT(1);


        LocScriptGen.body_return body1 =null;


        try {
            // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:29:2: ( ^( FILTER body ) -> filterScript(className=classNametypeName=type.getName()body=$body.st))
            // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:29:4: ^( FILTER body )
            {
            match(input,FILTER,FOLLOW_FILTER_in_startFilter49); 

            if ( input.LA(1)==Token.DOWN ) {
                match(input, Token.DOWN, null); 
                pushFollow(FOLLOW_body_in_startFilter51);
                body1=body();

                state._fsp--;


                match(input, Token.UP, null); 
            }


            // TEMPLATE REWRITE
            // 29:19: -> filterScript(className=classNametypeName=type.getName()body=$body.st)
            {
                retval.st = templateLib.getInstanceOf("filterScript",new STAttrMap().put("className", className).put("typeName", type.getName()).put("body", (body1!=null?body1.st:null)));
            }



            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
        	// do for sure before leaving
        }
        return retval;
    }
    // $ANTLR end "startFilter"


    public static class startBody_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };


    // $ANTLR start "startBody"
    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:32:1: startBody : ^( FILTER body ) -> {$body.st};
    public final LocScriptGen.startBody_return startBody() throws RecognitionException {
        LocScriptGen.startBody_return retval = new LocScriptGen.startBody_return();
        retval.start = input.LT(1);


        LocScriptGen.body_return body2 =null;


        try {
            // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:33:2: ( ^( FILTER body ) -> {$body.st})
            // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:33:4: ^( FILTER body )
            {
            match(input,FILTER,FOLLOW_FILTER_in_startBody84); 

            if ( input.LA(1)==Token.DOWN ) {
                match(input, Token.DOWN, null); 
                pushFollow(FOLLOW_body_in_startBody86);
                body2=body();

                state._fsp--;


                match(input, Token.UP, null); 
            }


            // TEMPLATE REWRITE
            // 33:19: -> {$body.st}
            {
                retval.st = (body2!=null?body2.st:null);
            }



            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
        	// do for sure before leaving
        }
        return retval;
    }
    // $ANTLR end "startBody"


    public static class body_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };


    // $ANTLR start "body"
    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:36:1: body : (s+= statement )* -> body(typeName=type.getName()stats=$s);
    public final LocScriptGen.body_return body() throws RecognitionException {
        LocScriptGen.body_return retval = new LocScriptGen.body_return();
        retval.start = input.LT(1);


        List list_s=null;
        RuleReturnScope s = null;
        try {
            // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:36:5: ( (s+= statement )* -> body(typeName=type.getName()stats=$s))
            // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:36:7: (s+= statement )*
            {
            // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:36:7: (s+= statement )*
            loop1:
            do {
                int alt1=2;
                int LA1_0 = input.LA(1);

                if ( (LA1_0==DEF||LA1_0==EXPR||LA1_0==FOR||LA1_0==RETURN) ) {
                    alt1=1;
                }


                switch (alt1) {
            	case 1 :
            	    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:36:8: s+= statement
            	    {
            	    pushFollow(FOLLOW_statement_in_body104);
            	    s=statement();

            	    state._fsp--;

            	    if (list_s==null) list_s=new ArrayList();
            	    list_s.add(s.getTemplate());


            	    }
            	    break;

            	default :
            	    break loop1;
                }
            } while (true);


            // TEMPLATE REWRITE
            // 36:23: -> body(typeName=type.getName()stats=$s)
            {
                retval.st = templateLib.getInstanceOf("body",new STAttrMap().put("typeName", type.getName()).put("stats", list_s));
            }



            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
        	// do for sure before leaving
        }
        return retval;
    }
    // $ANTLR end "body"


    public static class statement_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };


    // $ANTLR start "statement"
    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:39:1: statement : ( exprRoot -> stat(stat=$exprRoot.st)| returnStat -> {$returnStat.st}| def -> stat(stat=$def.st)| foreach -> {$foreach.st});
    public final LocScriptGen.statement_return statement() throws RecognitionException {
        LocScriptGen.statement_return retval = new LocScriptGen.statement_return();
        retval.start = input.LT(1);


        LocScriptGen.exprRoot_return exprRoot3 =null;

        LocScriptGen.returnStat_return returnStat4 =null;

        LocScriptGen.def_return def5 =null;

        LocScriptGen.foreach_return foreach6 =null;


        try {
            // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:40:2: ( exprRoot -> stat(stat=$exprRoot.st)| returnStat -> {$returnStat.st}| def -> stat(stat=$def.st)| foreach -> {$foreach.st})
            int alt2=4;
            switch ( input.LA(1) ) {
            case EXPR:
                {
                alt2=1;
                }
                break;
            case RETURN:
                {
                alt2=2;
                }
                break;
            case DEF:
                {
                alt2=3;
                }
                break;
            case FOR:
                {
                alt2=4;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 2, 0, input);

                throw nvae;

            }

            switch (alt2) {
                case 1 :
                    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:40:4: exprRoot
                    {
                    pushFollow(FOLLOW_exprRoot_in_statement131);
                    exprRoot3=exprRoot();

                    state._fsp--;


                    // TEMPLATE REWRITE
                    // 40:13: -> stat(stat=$exprRoot.st)
                    {
                        retval.st = templateLib.getInstanceOf("stat",new STAttrMap().put("stat", (exprRoot3!=null?exprRoot3.st:null)));
                    }



                    }
                    break;
                case 2 :
                    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:41:4: returnStat
                    {
                    pushFollow(FOLLOW_returnStat_in_statement145);
                    returnStat4=returnStat();

                    state._fsp--;


                    // TEMPLATE REWRITE
                    // 41:15: -> {$returnStat.st}
                    {
                        retval.st = (returnStat4!=null?returnStat4.st:null);
                    }



                    }
                    break;
                case 3 :
                    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:42:4: def
                    {
                    pushFollow(FOLLOW_def_in_statement154);
                    def5=def();

                    state._fsp--;


                    // TEMPLATE REWRITE
                    // 42:8: -> stat(stat=$def.st)
                    {
                        retval.st = templateLib.getInstanceOf("stat",new STAttrMap().put("stat", (def5!=null?def5.st:null)));
                    }



                    }
                    break;
                case 4 :
                    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:43:4: foreach
                    {
                    pushFollow(FOLLOW_foreach_in_statement168);
                    foreach6=foreach();

                    state._fsp--;


                    // TEMPLATE REWRITE
                    // 43:12: -> {$foreach.st}
                    {
                        retval.st = (foreach6!=null?foreach6.st:null);
                    }



                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
        	// do for sure before leaving
        }
        return retval;
    }
    // $ANTLR end "statement"


    public static class def_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };


    // $ANTLR start "def"
    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:46:1: def : ^( DEF a= ID b= ID ( exprRoot )? ) -> def(type=$b.symbol.getType().getAlias()name=$a.textinit=$exprRoot.st);
    public final LocScriptGen.def_return def() throws RecognitionException {
        LocScriptGen.def_return retval = new LocScriptGen.def_return();
        retval.start = input.LT(1);


        LocScriptAST a=null;
        LocScriptAST b=null;
        LocScriptGen.exprRoot_return exprRoot7 =null;


        try {
            // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:46:5: ( ^( DEF a= ID b= ID ( exprRoot )? ) -> def(type=$b.symbol.getType().getAlias()name=$a.textinit=$exprRoot.st))
            // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:46:7: ^( DEF a= ID b= ID ( exprRoot )? )
            {
            match(input,DEF,FOLLOW_DEF_in_def184); 

            match(input, Token.DOWN, null); 
            a=(LocScriptAST)match(input,ID,FOLLOW_ID_in_def188); 

            b=(LocScriptAST)match(input,ID,FOLLOW_ID_in_def192); 

            // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:46:23: ( exprRoot )?
            int alt3=2;
            int LA3_0 = input.LA(1);

            if ( (LA3_0==EXPR) ) {
                alt3=1;
            }
            switch (alt3) {
                case 1 :
                    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:46:23: exprRoot
                    {
                    pushFollow(FOLLOW_exprRoot_in_def194);
                    exprRoot7=exprRoot();

                    state._fsp--;


                    }
                    break;

            }


            match(input, Token.UP, null); 


            // TEMPLATE REWRITE
            // 46:34: -> def(type=$b.symbol.getType().getAlias()name=$a.textinit=$exprRoot.st)
            {
                retval.st = templateLib.getInstanceOf("def",new STAttrMap().put("type", b.symbol.getType().getAlias()).put("name", (a!=null?a.getText():null)).put("init", (exprRoot7!=null?exprRoot7.st:null)));
            }



            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
        	// do for sure before leaving
        }
        return retval;
    }
    // $ANTLR end "def"


    public static class foreach_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };


    // $ANTLR start "foreach"
    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:49:1: foreach : ^( FOR a= def b= exprRoot block ) -> foreach(def=$a.stexpr=$b.stblock=$block.st);
    public final LocScriptGen.foreach_return foreach() throws RecognitionException {
        LocScriptGen.foreach_return retval = new LocScriptGen.foreach_return();
        retval.start = input.LT(1);


        LocScriptGen.def_return a =null;

        LocScriptGen.exprRoot_return b =null;

        LocScriptGen.block_return block8 =null;


        try {
            // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:50:2: ( ^( FOR a= def b= exprRoot block ) -> foreach(def=$a.stexpr=$b.stblock=$block.st))
            // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:50:4: ^( FOR a= def b= exprRoot block )
            {
            match(input,FOR,FOLLOW_FOR_in_foreach228); 

            match(input, Token.DOWN, null); 
            pushFollow(FOLLOW_def_in_foreach232);
            a=def();

            state._fsp--;


            pushFollow(FOLLOW_exprRoot_in_foreach236);
            b=exprRoot();

            state._fsp--;


            pushFollow(FOLLOW_block_in_foreach238);
            block8=block();

            state._fsp--;


            match(input, Token.UP, null); 


            // TEMPLATE REWRITE
            // 50:34: -> foreach(def=$a.stexpr=$b.stblock=$block.st)
            {
                retval.st = templateLib.getInstanceOf("foreach",new STAttrMap().put("def", (a!=null?a.st:null)).put("expr", (b!=null?b.st:null)).put("block", (block8!=null?block8.st:null)));
            }



            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
        	// do for sure before leaving
        }
        return retval;
    }
    // $ANTLR end "foreach"


    public static class returnStat_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };


    // $ANTLR start "returnStat"
    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:53:1: returnStat : ^( RETURN exprRoot ) -> returnStat(expr=$exprRoot.st);
    public final LocScriptGen.returnStat_return returnStat() throws RecognitionException {
        LocScriptGen.returnStat_return retval = new LocScriptGen.returnStat_return();
        retval.start = input.LT(1);


        LocScriptGen.exprRoot_return exprRoot9 =null;


        try {
            // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:54:2: ( ^( RETURN exprRoot ) -> returnStat(expr=$exprRoot.st))
            // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:54:4: ^( RETURN exprRoot )
            {
            match(input,RETURN,FOLLOW_RETURN_in_returnStat271); 

            match(input, Token.DOWN, null); 
            pushFollow(FOLLOW_exprRoot_in_returnStat273);
            exprRoot9=exprRoot();

            state._fsp--;


            match(input, Token.UP, null); 


            // TEMPLATE REWRITE
            // 54:23: -> returnStat(expr=$exprRoot.st)
            {
                retval.st = templateLib.getInstanceOf("returnStat",new STAttrMap().put("expr", (exprRoot9!=null?exprRoot9.st:null)));
            }



            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
        	// do for sure before leaving
        }
        return retval;
    }
    // $ANTLR end "returnStat"


    public static class block_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };


    // $ANTLR start "block"
    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:57:1: block : ^( BLOCK (s+= statement )* ) -> block(stats=$s);
    public final LocScriptGen.block_return block() throws RecognitionException {
        LocScriptGen.block_return retval = new LocScriptGen.block_return();
        retval.start = input.LT(1);


        List list_s=null;
        RuleReturnScope s = null;
        try {
            // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:58:2: ( ^( BLOCK (s+= statement )* ) -> block(stats=$s))
            // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:58:4: ^( BLOCK (s+= statement )* )
            {
            match(input,BLOCK,FOLLOW_BLOCK_in_block296); 

            if ( input.LA(1)==Token.DOWN ) {
                match(input, Token.DOWN, null); 
                // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:58:12: (s+= statement )*
                loop4:
                do {
                    int alt4=2;
                    int LA4_0 = input.LA(1);

                    if ( (LA4_0==DEF||LA4_0==EXPR||LA4_0==FOR||LA4_0==RETURN) ) {
                        alt4=1;
                    }


                    switch (alt4) {
                	case 1 :
                	    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:58:13: s+= statement
                	    {
                	    pushFollow(FOLLOW_statement_in_block301);
                	    s=statement();

                	    state._fsp--;

                	    if (list_s==null) list_s=new ArrayList();
                	    list_s.add(s.getTemplate());


                	    }
                	    break;

                	default :
                	    break loop4;
                    }
                } while (true);


                match(input, Token.UP, null); 
            }


            // TEMPLATE REWRITE
            // 58:29: -> block(stats=$s)
            {
                retval.st = templateLib.getInstanceOf("block",new STAttrMap().put("stats", list_s));
            }



            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
        	// do for sure before leaving
        }
        return retval;
    }
    // $ANTLR end "block"


    public static class exprRoot_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };


    // $ANTLR start "exprRoot"
    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:61:1: exprRoot : ^( EXPR expr ) -> {$expr.st};
    public final LocScriptGen.exprRoot_return exprRoot() throws RecognitionException {
        LocScriptGen.exprRoot_return retval = new LocScriptGen.exprRoot_return();
        retval.start = input.LT(1);


        LocScriptGen.expr_return expr10 =null;


        try {
            // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:61:9: ( ^( EXPR expr ) -> {$expr.st})
            // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:61:11: ^( EXPR expr )
            {
            match(input,EXPR,FOLLOW_EXPR_in_exprRoot324); 

            match(input, Token.DOWN, null); 
            pushFollow(FOLLOW_expr_in_exprRoot326);
            expr10=expr();

            state._fsp--;


            match(input, Token.UP, null); 


            // TEMPLATE REWRITE
            // 61:24: -> {$expr.st}
            {
                retval.st = (expr10!=null?expr10.st:null);
            }



            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
        	// do for sure before leaving
        }
        return retval;
    }
    // $ANTLR end "exprRoot"


    public static class expr_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };


    // $ANTLR start "expr"
    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:64:1: expr : ( atom -> {$atom.st}| assign -> {$assign.st}| binaryOp -> {$binaryOp.st}| condOp -> {$condOp.st}| prefixOp -> {$prefixOp.st}| postfixOp -> {$postfixOp.st}| arrayAccess -> {$arrayAccess.st}| memAccess -> {$memAccess.st}| var -> {$var.st});
    public final LocScriptGen.expr_return expr() throws RecognitionException {
        LocScriptGen.expr_return retval = new LocScriptGen.expr_return();
        retval.start = input.LT(1);


        LocScriptGen.atom_return atom11 =null;

        LocScriptGen.assign_return assign12 =null;

        LocScriptGen.binaryOp_return binaryOp13 =null;

        LocScriptGen.condOp_return condOp14 =null;

        LocScriptGen.prefixOp_return prefixOp15 =null;

        LocScriptGen.postfixOp_return postfixOp16 =null;

        LocScriptGen.arrayAccess_return arrayAccess17 =null;

        LocScriptGen.memAccess_return memAccess18 =null;

        LocScriptGen.var_return var19 =null;


        try {
            // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:65:2: ( atom -> {$atom.st}| assign -> {$assign.st}| binaryOp -> {$binaryOp.st}| condOp -> {$condOp.st}| prefixOp -> {$prefixOp.st}| postfixOp -> {$postfixOp.st}| arrayAccess -> {$arrayAccess.st}| memAccess -> {$memAccess.st}| var -> {$var.st})
            int alt5=9;
            switch ( input.LA(1) ) {
            case FALSE:
            case FLOAT:
            case INT:
            case THIS:
            case TRUE:
                {
                alt5=1;
                }
                break;
            case ASSIGN:
            case DIV_ASSIGN:
            case MINUS_ASSIGN:
            case MULT_ASSIGN:
            case PLUS_ASSIGN:
                {
                alt5=2;
                }
                break;
            case DOWN:
            case AND:
            case BIT_AND:
            case BIT_OR:
            case DIV:
            case EQUALS:
            case GREATER_THAN:
            case GREATER_THAN_EQUALS:
            case LESS_THAN:
            case LESS_THAN_EQUALS:
            case MINUS:
            case MOD:
            case MULT:
            case NOT_EQUALS:
            case OR:
            case PLUS:
            case SHIFT_LEFT:
            case SHIFT_RIGHT:
            case U_SHIFT_RIGHT:
            case XOR:
                {
                alt5=3;
                }
                break;
            case COND_OP:
                {
                alt5=4;
                }
                break;
            case BIT_NEG:
            case NEG:
            case NOT:
            case PRE_DEC:
            case PRE_INC:
                {
                alt5=5;
                }
                break;
            case POST_DEC:
            case POST_INC:
                {
                alt5=6;
                }
                break;
            case ARRAY_ACCESS:
                {
                alt5=7;
                }
                break;
            case MEM_ACCESS:
                {
                alt5=8;
                }
                break;
            case VAR:
                {
                alt5=9;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 5, 0, input);

                throw nvae;

            }

            switch (alt5) {
                case 1 :
                    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:65:4: atom
                    {
                    pushFollow(FOLLOW_atom_in_expr343);
                    atom11=atom();

                    state._fsp--;


                    // TEMPLATE REWRITE
                    // 65:9: -> {$atom.st}
                    {
                        retval.st = (atom11!=null?atom11.st:null);
                    }



                    }
                    break;
                case 2 :
                    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:66:4: assign
                    {
                    pushFollow(FOLLOW_assign_in_expr352);
                    assign12=assign();

                    state._fsp--;


                    // TEMPLATE REWRITE
                    // 66:11: -> {$assign.st}
                    {
                        retval.st = (assign12!=null?assign12.st:null);
                    }



                    }
                    break;
                case 3 :
                    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:67:4: binaryOp
                    {
                    pushFollow(FOLLOW_binaryOp_in_expr361);
                    binaryOp13=binaryOp();

                    state._fsp--;


                    // TEMPLATE REWRITE
                    // 67:13: -> {$binaryOp.st}
                    {
                        retval.st = (binaryOp13!=null?binaryOp13.st:null);
                    }



                    }
                    break;
                case 4 :
                    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:68:4: condOp
                    {
                    pushFollow(FOLLOW_condOp_in_expr370);
                    condOp14=condOp();

                    state._fsp--;


                    // TEMPLATE REWRITE
                    // 68:11: -> {$condOp.st}
                    {
                        retval.st = (condOp14!=null?condOp14.st:null);
                    }



                    }
                    break;
                case 5 :
                    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:69:4: prefixOp
                    {
                    pushFollow(FOLLOW_prefixOp_in_expr379);
                    prefixOp15=prefixOp();

                    state._fsp--;


                    // TEMPLATE REWRITE
                    // 69:13: -> {$prefixOp.st}
                    {
                        retval.st = (prefixOp15!=null?prefixOp15.st:null);
                    }



                    }
                    break;
                case 6 :
                    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:70:4: postfixOp
                    {
                    pushFollow(FOLLOW_postfixOp_in_expr388);
                    postfixOp16=postfixOp();

                    state._fsp--;


                    // TEMPLATE REWRITE
                    // 70:14: -> {$postfixOp.st}
                    {
                        retval.st = (postfixOp16!=null?postfixOp16.st:null);
                    }



                    }
                    break;
                case 7 :
                    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:71:4: arrayAccess
                    {
                    pushFollow(FOLLOW_arrayAccess_in_expr397);
                    arrayAccess17=arrayAccess();

                    state._fsp--;


                    // TEMPLATE REWRITE
                    // 71:16: -> {$arrayAccess.st}
                    {
                        retval.st = (arrayAccess17!=null?arrayAccess17.st:null);
                    }



                    }
                    break;
                case 8 :
                    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:72:4: memAccess
                    {
                    pushFollow(FOLLOW_memAccess_in_expr406);
                    memAccess18=memAccess();

                    state._fsp--;


                    // TEMPLATE REWRITE
                    // 72:14: -> {$memAccess.st}
                    {
                        retval.st = (memAccess18!=null?memAccess18.st:null);
                    }



                    }
                    break;
                case 9 :
                    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:73:4: var
                    {
                    pushFollow(FOLLOW_var_in_expr415);
                    var19=var();

                    state._fsp--;


                    // TEMPLATE REWRITE
                    // 73:8: -> {$var.st}
                    {
                        retval.st = (var19!=null?var19.st:null);
                    }



                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
        	// do for sure before leaving
        }
        return retval;
    }
    // $ANTLR end "expr"


    public static class atom_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };


    // $ANTLR start "atom"
    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:76:1: atom : ( ( TRUE | FALSE | INT | FLOAT ) | THIS -> this();
    public final LocScriptGen.atom_return atom() throws RecognitionException {
        LocScriptGen.atom_return retval = new LocScriptGen.atom_return();
        retval.start = input.LT(1);


        try {
            // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:77:2: ( ( TRUE | FALSE | INT | FLOAT ) | THIS -> this()
            int alt6=2;
            int LA6_0 = input.LA(1);

            if ( (LA6_0==FALSE||LA6_0==FLOAT||LA6_0==INT||LA6_0==TRUE) ) {
                alt6=1;
            }
            else if ( (LA6_0==THIS) ) {
                alt6=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 6, 0, input);

                throw nvae;

            }
            switch (alt6) {
                case 1 :
                    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:77:4: ( TRUE | FALSE | INT | FLOAT )
                    {
                    if ( input.LA(1)==FALSE||input.LA(1)==FLOAT||input.LA(1)==INT||input.LA(1)==TRUE ) {
                        input.consume();
                        state.errorRecovery=false;
                    }
                    else {
                        MismatchedSetException mse = new MismatchedSetException(null,input);
                        throw mse;
                    }


                    retval.st =new StringTemplate(templateLib,input.getTokenStream().toString(input.getTreeAdaptor().getTokenStartIndex(retval.start),input.getTreeAdaptor().getTokenStopIndex(retval.start)));

                    }
                    break;
                case 2 :
                    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:81:4: THIS
                    {
                    match(input,THIS,FOLLOW_THIS_in_atom455); 

                    // TEMPLATE REWRITE
                    // 81:9: -> this(
                    {
                        retval.st = templateLib.getInstanceOf("this");
                    }



                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
        	// do for sure before leaving
        }
        return retval;
    }
    // $ANTLR end "atom"


    public static class op_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };


    // $ANTLR start "op"
    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:84:1: op : ( PLUS | MINUS | MULT | DIV | MOD | LESS_THAN | GREATER_THAN | LESS_THAN_EQUALS | GREATER_THAN_EQUALS || EQUALS | NOT_EQUALS | AND | OR | BIT_AND | BIT_OR | XOR | SHIFT_LEFT | SHIFT_RIGHT | U_SHIFT_RIGHT );
    public final LocScriptGen.op_return op() throws RecognitionException {
        LocScriptGen.op_return retval = new LocScriptGen.op_return();
        retval.start = input.LT(1);


        try {
            // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:86:2: ( PLUS | MINUS | MULT | DIV | MOD | LESS_THAN | GREATER_THAN | LESS_THAN_EQUALS | GREATER_THAN_EQUALS || EQUALS | NOT_EQUALS | AND | OR | BIT_AND | BIT_OR | XOR | SHIFT_LEFT | SHIFT_RIGHT | U_SHIFT_RIGHT )
            int alt7=20;
            switch ( input.LA(1) ) {
            case PLUS:
                {
                alt7=1;
                }
                break;
            case MINUS:
                {
                alt7=2;
                }
                break;
            case MULT:
                {
                alt7=3;
                }
                break;
            case DIV:
                {
                alt7=4;
                }
                break;
            case MOD:
                {
                alt7=5;
                }
                break;
            case LESS_THAN:
                {
                alt7=6;
                }
                break;
            case GREATER_THAN:
                {
                alt7=7;
                }
                break;
            case LESS_THAN_EQUALS:
                {
                alt7=8;
                }
                break;
            case GREATER_THAN_EQUALS:
                {
                alt7=9;
                }
                break;
            case DOWN:
                {
                alt7=10;
                }
                break;
            case EQUALS:
                {
                alt7=11;
                }
                break;
            case NOT_EQUALS:
                {
                alt7=12;
                }
                break;
            case AND:
                {
                alt7=13;
                }
                break;
            case OR:
                {
                alt7=14;
                }
                break;
            case BIT_AND:
                {
                alt7=15;
                }
                break;
            case BIT_OR:
                {
                alt7=16;
                }
                break;
            case XOR:
                {
                alt7=17;
                }
                break;
            case SHIFT_LEFT:
                {
                alt7=18;
                }
                break;
            case SHIFT_RIGHT:
                {
                alt7=19;
                }
                break;
            case U_SHIFT_RIGHT:
                {
                alt7=20;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 7, 0, input);

                throw nvae;

            }

            switch (alt7) {
                case 1 :
                    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:86:4: PLUS
                    {
                    match(input,PLUS,FOLLOW_PLUS_in_op478); 

                    }
                    break;
                case 2 :
                    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:86:9: MINUS
                    {
                    match(input,MINUS,FOLLOW_MINUS_in_op480); 

                    }
                    break;
                case 3 :
                    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:86:15: MULT
                    {
                    match(input,MULT,FOLLOW_MULT_in_op482); 

                    }
                    break;
                case 4 :
                    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:86:20: DIV
                    {
                    match(input,DIV,FOLLOW_DIV_in_op484); 

                    }
                    break;
                case 5 :
                    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:86:24: MOD
                    {
                    match(input,MOD,FOLLOW_MOD_in_op486); 

                    }
                    break;
                case 6 :
                    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:87:4: LESS_THAN
                    {
                    match(input,LESS_THAN,FOLLOW_LESS_THAN_in_op491); 

                    }
                    break;
                case 7 :
                    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:87:14: GREATER_THAN
                    {
                    match(input,GREATER_THAN,FOLLOW_GREATER_THAN_in_op493); 

                    }
                    break;
                case 8 :
                    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:87:27: LESS_THAN_EQUALS
                    {
                    match(input,LESS_THAN_EQUALS,FOLLOW_LESS_THAN_EQUALS_in_op495); 

                    }
                    break;
                case 9 :
                    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:87:44: GREATER_THAN_EQUALS
                    {
                    match(input,GREATER_THAN_EQUALS,FOLLOW_GREATER_THAN_EQUALS_in_op497); 

                    }
                    break;
                case 10 :
                    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:88:2: 
                    {
                    }
                    break;
                case 11 :
                    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:88:4: EQUALS
                    {
                    match(input,EQUALS,FOLLOW_EQUALS_in_op503); 

                    }
                    break;
                case 12 :
                    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:88:11: NOT_EQUALS
                    {
                    match(input,NOT_EQUALS,FOLLOW_NOT_EQUALS_in_op505); 

                    }
                    break;
                case 13 :
                    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:89:4: AND
                    {
                    match(input,AND,FOLLOW_AND_in_op510); 

                    }
                    break;
                case 14 :
                    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:89:8: OR
                    {
                    match(input,OR,FOLLOW_OR_in_op512); 

                    }
                    break;
                case 15 :
                    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:90:4: BIT_AND
                    {
                    match(input,BIT_AND,FOLLOW_BIT_AND_in_op517); 

                    }
                    break;
                case 16 :
                    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:90:12: BIT_OR
                    {
                    match(input,BIT_OR,FOLLOW_BIT_OR_in_op519); 

                    }
                    break;
                case 17 :
                    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:90:19: XOR
                    {
                    match(input,XOR,FOLLOW_XOR_in_op521); 

                    }
                    break;
                case 18 :
                    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:91:4: SHIFT_LEFT
                    {
                    match(input,SHIFT_LEFT,FOLLOW_SHIFT_LEFT_in_op526); 

                    }
                    break;
                case 19 :
                    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:91:15: SHIFT_RIGHT
                    {
                    match(input,SHIFT_RIGHT,FOLLOW_SHIFT_RIGHT_in_op528); 

                    }
                    break;
                case 20 :
                    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:91:27: U_SHIFT_RIGHT
                    {
                    match(input,U_SHIFT_RIGHT,FOLLOW_U_SHIFT_RIGHT_in_op530); 

                    }
                    break;

            }
            retval.st =templateLib.getInstanceOf("operator",new STAttrMap().put("o", ((LocScriptAST)retval.start).getText()));
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
        	// do for sure before leaving
        }
        return retval;
    }
    // $ANTLR end "op"


    public static class assignOp_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };


    // $ANTLR start "assignOp"
    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:94:1: assignOp : ( ASSIGN | PLUS_ASSIGN | MINUS_ASSIGN | MULT_ASSIGN | DIV_ASSIGN );
    public final LocScriptGen.assignOp_return assignOp() throws RecognitionException {
        LocScriptGen.assignOp_return retval = new LocScriptGen.assignOp_return();
        retval.start = input.LT(1);


        try {
            // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:96:2: ( ASSIGN | PLUS_ASSIGN | MINUS_ASSIGN | MULT_ASSIGN | DIV_ASSIGN )
            // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:
            {
            if ( input.LA(1)==ASSIGN||input.LA(1)==DIV_ASSIGN||input.LA(1)==MINUS_ASSIGN||input.LA(1)==MULT_ASSIGN||input.LA(1)==PLUS_ASSIGN ) {
                input.consume();
                state.errorRecovery=false;
            }
            else {
                MismatchedSetException mse = new MismatchedSetException(null,input);
                throw mse;
            }


            }

            retval.st =new StringTemplate(templateLib,((LocScriptAST)retval.start).getText());
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
        	// do for sure before leaving
        }
        return retval;
    }
    // $ANTLR end "assignOp"


    public static class assign_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };


    // $ANTLR start "assign"
    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:99:1: assign : ^( assignOp var expr ) -> assign(op=$assignOp.stvar=$var.stexpr=$expr.st);
    public final LocScriptGen.assign_return assign() throws RecognitionException {
        LocScriptGen.assign_return retval = new LocScriptGen.assign_return();
        retval.start = input.LT(1);


        LocScriptGen.assignOp_return assignOp20 =null;

        LocScriptGen.var_return var21 =null;

        LocScriptGen.expr_return expr22 =null;


        try {
            // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:100:2: ( ^( assignOp var expr ) -> assign(op=$assignOp.stvar=$var.stexpr=$expr.st))
            // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:100:4: ^( assignOp var expr )
            {
            pushFollow(FOLLOW_assignOp_in_assign567);
            assignOp20=assignOp();

            state._fsp--;


            match(input, Token.DOWN, null); 
            pushFollow(FOLLOW_var_in_assign569);
            var21=var();

            state._fsp--;


            pushFollow(FOLLOW_expr_in_assign571);
            expr22=expr();

            state._fsp--;


            match(input, Token.UP, null); 


            // TEMPLATE REWRITE
            // 100:25: -> assign(op=$assignOp.stvar=$var.stexpr=$expr.st)
            {
                retval.st = templateLib.getInstanceOf("assign",new STAttrMap().put("op", (assignOp20!=null?assignOp20.st:null)).put("var", (var21!=null?var21.st:null)).put("expr", (expr22!=null?expr22.st:null)));
            }



            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
        	// do for sure before leaving
        }
        return retval;
    }
    // $ANTLR end "assign"


    public static class binaryOp_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };


    // $ANTLR start "binaryOp"
    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:103:1: binaryOp : ^( op a= expr b= expr ) -> binaryOp(op=$op.sta=$a.stb=$b.st);
    public final LocScriptGen.binaryOp_return binaryOp() throws RecognitionException {
        LocScriptGen.binaryOp_return retval = new LocScriptGen.binaryOp_return();
        retval.start = input.LT(1);


        LocScriptGen.expr_return a =null;

        LocScriptGen.expr_return b =null;

        LocScriptGen.op_return op23 =null;


        try {
            // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:104:2: ( ^( op a= expr b= expr ) -> binaryOp(op=$op.sta=$a.stb=$b.st))
            // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:104:4: ^( op a= expr b= expr )
            {
            pushFollow(FOLLOW_op_in_binaryOp604);
            op23=op();

            state._fsp--;


            match(input, Token.DOWN, null); 
            pushFollow(FOLLOW_expr_in_binaryOp608);
            a=expr();

            state._fsp--;


            pushFollow(FOLLOW_expr_in_binaryOp612);
            b=expr();

            state._fsp--;


            match(input, Token.UP, null); 


            // TEMPLATE REWRITE
            // 104:24: -> binaryOp(op=$op.sta=$a.stb=$b.st)
            {
                retval.st = templateLib.getInstanceOf("binaryOp",new STAttrMap().put("op", (op23!=null?op23.st:null)).put("a", (a!=null?a.st:null)).put("b", (b!=null?b.st:null)));
            }



            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
        	// do for sure before leaving
        }
        return retval;
    }
    // $ANTLR end "binaryOp"


    public static class condOp_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };


    // $ANTLR start "condOp"
    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:107:1: condOp : ^( COND_OP a= expr b= expr c= expr ) -> condOp(a=$a.stb=$b.stc=$c.st);
    public final LocScriptGen.condOp_return condOp() throws RecognitionException {
        LocScriptGen.condOp_return retval = new LocScriptGen.condOp_return();
        retval.start = input.LT(1);


        LocScriptGen.expr_return a =null;

        LocScriptGen.expr_return b =null;

        LocScriptGen.expr_return c =null;


        try {
            // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:108:2: ( ^( COND_OP a= expr b= expr c= expr ) -> condOp(a=$a.stb=$b.stc=$c.st))
            // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:108:4: ^( COND_OP a= expr b= expr c= expr )
            {
            match(input,COND_OP,FOLLOW_COND_OP_in_condOp645); 

            match(input, Token.DOWN, null); 
            pushFollow(FOLLOW_expr_in_condOp649);
            a=expr();

            state._fsp--;


            pushFollow(FOLLOW_expr_in_condOp653);
            b=expr();

            state._fsp--;


            pushFollow(FOLLOW_expr_in_condOp657);
            c=expr();

            state._fsp--;


            match(input, Token.UP, null); 


            // TEMPLATE REWRITE
            // 108:36: -> condOp(a=$a.stb=$b.stc=$c.st)
            {
                retval.st = templateLib.getInstanceOf("condOp",new STAttrMap().put("a", (a!=null?a.st:null)).put("b", (b!=null?b.st:null)).put("c", (c!=null?c.st:null)));
            }



            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
        	// do for sure before leaving
        }
        return retval;
    }
    // $ANTLR end "condOp"


    public static class prefixOp_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };


    // $ANTLR start "prefixOp"
    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:111:1: prefixOp : ( ^( NOT a= expr ) -> prefixOp(op=\"!\"a=$a.st)| ^( NEG a= expr ) -> prefixOp(op=\"-\"a=$a.st)| ^( BIT_NEG a= expr ) -> prefixOp(op=\"~\"a=$a.st)| ^( PRE_INC a= expr ) -> prefixOp(op=\"++\"a=$a.st)| ^( PRE_DEC a= expr ) -> prefixOp(op=\"--\"a=$a.st));
    public final LocScriptGen.prefixOp_return prefixOp() throws RecognitionException {
        LocScriptGen.prefixOp_return retval = new LocScriptGen.prefixOp_return();
        retval.start = input.LT(1);


        LocScriptGen.expr_return a =null;


        try {
            // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:112:2: ( ^( NOT a= expr ) -> prefixOp(op=\"!\"a=$a.st)| ^( NEG a= expr ) -> prefixOp(op=\"-\"a=$a.st)| ^( BIT_NEG a= expr ) -> prefixOp(op=\"~\"a=$a.st)| ^( PRE_INC a= expr ) -> prefixOp(op=\"++\"a=$a.st)| ^( PRE_DEC a= expr ) -> prefixOp(op=\"--\"a=$a.st))
            int alt8=5;
            switch ( input.LA(1) ) {
            case NOT:
                {
                alt8=1;
                }
                break;
            case NEG:
                {
                alt8=2;
                }
                break;
            case BIT_NEG:
                {
                alt8=3;
                }
                break;
            case PRE_INC:
                {
                alt8=4;
                }
                break;
            case PRE_DEC:
                {
                alt8=5;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 8, 0, input);

                throw nvae;

            }

            switch (alt8) {
                case 1 :
                    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:112:4: ^( NOT a= expr )
                    {
                    match(input,NOT,FOLLOW_NOT_in_prefixOp690); 

                    match(input, Token.DOWN, null); 
                    pushFollow(FOLLOW_expr_in_prefixOp694);
                    a=expr();

                    state._fsp--;


                    match(input, Token.UP, null); 


                    // TEMPLATE REWRITE
                    // 112:18: -> prefixOp(op=\"!\"a=$a.st)
                    {
                        retval.st = templateLib.getInstanceOf("prefixOp",new STAttrMap().put("op", "!").put("a", (a!=null?a.st:null)));
                    }



                    }
                    break;
                case 2 :
                    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:113:4: ^( NEG a= expr )
                    {
                    match(input,NEG,FOLLOW_NEG_in_prefixOp715); 

                    match(input, Token.DOWN, null); 
                    pushFollow(FOLLOW_expr_in_prefixOp719);
                    a=expr();

                    state._fsp--;


                    match(input, Token.UP, null); 


                    // TEMPLATE REWRITE
                    // 113:18: -> prefixOp(op=\"-\"a=$a.st)
                    {
                        retval.st = templateLib.getInstanceOf("prefixOp",new STAttrMap().put("op", "-").put("a", (a!=null?a.st:null)));
                    }



                    }
                    break;
                case 3 :
                    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:114:4: ^( BIT_NEG a= expr )
                    {
                    match(input,BIT_NEG,FOLLOW_BIT_NEG_in_prefixOp740); 

                    match(input, Token.DOWN, null); 
                    pushFollow(FOLLOW_expr_in_prefixOp744);
                    a=expr();

                    state._fsp--;


                    match(input, Token.UP, null); 


                    // TEMPLATE REWRITE
                    // 114:22: -> prefixOp(op=\"~\"a=$a.st)
                    {
                        retval.st = templateLib.getInstanceOf("prefixOp",new STAttrMap().put("op", "~").put("a", (a!=null?a.st:null)));
                    }



                    }
                    break;
                case 4 :
                    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:115:4: ^( PRE_INC a= expr )
                    {
                    match(input,PRE_INC,FOLLOW_PRE_INC_in_prefixOp765); 

                    match(input, Token.DOWN, null); 
                    pushFollow(FOLLOW_expr_in_prefixOp769);
                    a=expr();

                    state._fsp--;


                    match(input, Token.UP, null); 


                    // TEMPLATE REWRITE
                    // 115:22: -> prefixOp(op=\"++\"a=$a.st)
                    {
                        retval.st = templateLib.getInstanceOf("prefixOp",new STAttrMap().put("op", "++").put("a", (a!=null?a.st:null)));
                    }



                    }
                    break;
                case 5 :
                    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:116:4: ^( PRE_DEC a= expr )
                    {
                    match(input,PRE_DEC,FOLLOW_PRE_DEC_in_prefixOp790); 

                    match(input, Token.DOWN, null); 
                    pushFollow(FOLLOW_expr_in_prefixOp794);
                    a=expr();

                    state._fsp--;


                    match(input, Token.UP, null); 


                    // TEMPLATE REWRITE
                    // 116:22: -> prefixOp(op=\"--\"a=$a.st)
                    {
                        retval.st = templateLib.getInstanceOf("prefixOp",new STAttrMap().put("op", "--").put("a", (a!=null?a.st:null)));
                    }



                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
        	// do for sure before leaving
        }
        return retval;
    }
    // $ANTLR end "prefixOp"


    public static class postfixOp_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };


    // $ANTLR start "postfixOp"
    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:119:1: postfixOp : ( ^( POST_INC a= expr ) -> postfixOp(op=\"++\"a=$a.st)| ^( POST_DEC a= expr ) -> postfixOp(op=\"--\"a=$a.st));
    public final LocScriptGen.postfixOp_return postfixOp() throws RecognitionException {
        LocScriptGen.postfixOp_return retval = new LocScriptGen.postfixOp_return();
        retval.start = input.LT(1);


        LocScriptGen.expr_return a =null;


        try {
            // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:120:2: ( ^( POST_INC a= expr ) -> postfixOp(op=\"++\"a=$a.st)| ^( POST_DEC a= expr ) -> postfixOp(op=\"--\"a=$a.st))
            int alt9=2;
            int LA9_0 = input.LA(1);

            if ( (LA9_0==POST_INC) ) {
                alt9=1;
            }
            else if ( (LA9_0==POST_DEC) ) {
                alt9=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 9, 0, input);

                throw nvae;

            }
            switch (alt9) {
                case 1 :
                    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:120:4: ^( POST_INC a= expr )
                    {
                    match(input,POST_INC,FOLLOW_POST_INC_in_postfixOp822); 

                    match(input, Token.DOWN, null); 
                    pushFollow(FOLLOW_expr_in_postfixOp826);
                    a=expr();

                    state._fsp--;


                    match(input, Token.UP, null); 


                    // TEMPLATE REWRITE
                    // 120:23: -> postfixOp(op=\"++\"a=$a.st)
                    {
                        retval.st = templateLib.getInstanceOf("postfixOp",new STAttrMap().put("op", "++").put("a", (a!=null?a.st:null)));
                    }



                    }
                    break;
                case 2 :
                    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:121:4: ^( POST_DEC a= expr )
                    {
                    match(input,POST_DEC,FOLLOW_POST_DEC_in_postfixOp847); 

                    match(input, Token.DOWN, null); 
                    pushFollow(FOLLOW_expr_in_postfixOp851);
                    a=expr();

                    state._fsp--;


                    match(input, Token.UP, null); 


                    // TEMPLATE REWRITE
                    // 121:23: -> postfixOp(op=\"--\"a=$a.st)
                    {
                        retval.st = templateLib.getInstanceOf("postfixOp",new STAttrMap().put("op", "--").put("a", (a!=null?a.st:null)));
                    }



                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
        	// do for sure before leaving
        }
        return retval;
    }
    // $ANTLR end "postfixOp"


    public static class arrayAccess_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };


    // $ANTLR start "arrayAccess"
    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:124:1: arrayAccess : ^( ARRAY_ACCESS a= expr b= expr ) -> arrayAccess(ar=$a.sti=$b.st);
    public final LocScriptGen.arrayAccess_return arrayAccess() throws RecognitionException {
        LocScriptGen.arrayAccess_return retval = new LocScriptGen.arrayAccess_return();
        retval.start = input.LT(1);


        LocScriptGen.expr_return a =null;

        LocScriptGen.expr_return b =null;


        try {
            // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:125:2: ( ^( ARRAY_ACCESS a= expr b= expr ) -> arrayAccess(ar=$a.sti=$b.st))
            // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:125:4: ^( ARRAY_ACCESS a= expr b= expr )
            {
            match(input,ARRAY_ACCESS,FOLLOW_ARRAY_ACCESS_in_arrayAccess879); 

            match(input, Token.DOWN, null); 
            pushFollow(FOLLOW_expr_in_arrayAccess883);
            a=expr();

            state._fsp--;


            pushFollow(FOLLOW_expr_in_arrayAccess887);
            b=expr();

            state._fsp--;


            match(input, Token.UP, null); 


            // TEMPLATE REWRITE
            // 125:34: -> arrayAccess(ar=$a.sti=$b.st)
            {
                retval.st = templateLib.getInstanceOf("arrayAccess",new STAttrMap().put("ar", (a!=null?a.st:null)).put("i", (b!=null?b.st:null)));
            }



            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
        	// do for sure before leaving
        }
        return retval;
    }
    // $ANTLR end "arrayAccess"


    public static class memAccess_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };


    // $ANTLR start "memAccess"
    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:128:1: memAccess : ^( MEM_ACCESS expr ID ) -> memberAccess(parent=$expr.stid=((FieldSymbol)$ID.symbol).getAlias());
    public final LocScriptGen.memAccess_return memAccess() throws RecognitionException {
        LocScriptGen.memAccess_return retval = new LocScriptGen.memAccess_return();
        retval.start = input.LT(1);


        LocScriptAST ID25=null;
        LocScriptGen.expr_return expr24 =null;


        try {
            // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:129:2: ( ^( MEM_ACCESS expr ID ) -> memberAccess(parent=$expr.stid=((FieldSymbol)$ID.symbol).getAlias()))
            // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:129:4: ^( MEM_ACCESS expr ID )
            {
            match(input,MEM_ACCESS,FOLLOW_MEM_ACCESS_in_memAccess915); 

            match(input, Token.DOWN, null); 
            pushFollow(FOLLOW_expr_in_memAccess917);
            expr24=expr();

            state._fsp--;


            ID25=(LocScriptAST)match(input,ID,FOLLOW_ID_in_memAccess919); 

            match(input, Token.UP, null); 


            // TEMPLATE REWRITE
            // 129:26: -> memberAccess(parent=$expr.stid=((FieldSymbol)$ID.symbol).getAlias())
            {
                retval.st = templateLib.getInstanceOf("memberAccess",new STAttrMap().put("parent", (expr24!=null?expr24.st:null)).put("id", ((FieldSymbol)ID25.symbol).getAlias()));
            }



            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
        	// do for sure before leaving
        }
        return retval;
    }
    // $ANTLR end "memAccess"


    public static class var_return extends TreeRuleReturnScope {
        public StringTemplate st;
        public Object getTemplate() { return st; }
        public String toString() { return st==null?null:st.toString(); }
    };


    // $ANTLR start "var"
    // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:132:1: var : ^( VAR ID ) -> {$st=%{((VariableSymbol)$ID.symbol).getAlias()};};
    public final LocScriptGen.var_return var() throws RecognitionException {
        LocScriptGen.var_return retval = new LocScriptGen.var_return();
        retval.start = input.LT(1);


        LocScriptAST ID26=null;

        try {
            // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:132:5: ( ^( VAR ID ) -> {$st=%{((VariableSymbol)$ID.symbol).getAlias()};})
            // C:\\Users\\Charles\\Documents\\ANTLR\\LocalizationScript\\LocScriptGen.g:132:7: ^( VAR ID )
            {
            match(input,VAR,FOLLOW_VAR_in_var946); 

            match(input, Token.DOWN, null); 
            ID26=(LocScriptAST)match(input,ID,FOLLOW_ID_in_var948); 

            match(input, Token.UP, null); 


            // TEMPLATE REWRITE
            // 132:17: -> {$st=%{((VariableSymbol)$ID.symbol).getAlias()};}
            {
                retval.st = retval.st =new StringTemplate(templateLib,((VariableSymbol)ID26.symbol).getAlias());;
            }



            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }

        finally {
        	// do for sure before leaving
        }
        return retval;
    }
    // $ANTLR end "var"

    // Delegated rules


 

    public static final BitSet FOLLOW_FILTER_in_startFilter49 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_body_in_startFilter51 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_FILTER_in_startBody84 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_body_in_startBody86 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_statement_in_body104 = new BitSet(new long[]{0x0002000000888002L});
    public static final BitSet FOLLOW_exprRoot_in_statement131 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_returnStat_in_statement145 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_def_in_statement154 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_foreach_in_statement168 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_DEF_in_def184 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_ID_in_def188 = new BitSet(new long[]{0x0000000004000000L});
    public static final BitSet FOLLOW_ID_in_def192 = new BitSet(new long[]{0x0000000000080008L});
    public static final BitSet FOLLOW_exprRoot_in_def194 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_FOR_in_foreach228 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_def_in_foreach232 = new BitSet(new long[]{0x0000000000080000L});
    public static final BitSet FOLLOW_exprRoot_in_foreach236 = new BitSet(new long[]{0x0000000000000400L});
    public static final BitSet FOLLOW_block_in_foreach238 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_RETURN_in_returnStat271 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_exprRoot_in_returnStat273 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_BLOCK_in_block296 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_statement_in_block301 = new BitSet(new long[]{0x0002000000888008L});
    public static final BitSet FOLLOW_EXPR_in_exprRoot324 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_exprRoot326 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_atom_in_expr343 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_assign_in_expr352 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_binaryOp_in_expr361 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_condOp_in_expr370 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_prefixOp_in_expr379 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_postfixOp_in_expr388 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_arrayAccess_in_expr397 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_memAccess_in_expr406 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_var_in_expr415 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_set_in_atom431 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_THIS_in_atom455 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_PLUS_in_op478 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_MINUS_in_op480 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_MULT_in_op482 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_DIV_in_op484 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_MOD_in_op486 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_LESS_THAN_in_op491 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_GREATER_THAN_in_op493 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_LESS_THAN_EQUALS_in_op495 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_GREATER_THAN_EQUALS_in_op497 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_EQUALS_in_op503 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_NOT_EQUALS_in_op505 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_AND_in_op510 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_OR_in_op512 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_BIT_AND_in_op517 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_BIT_OR_in_op519 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_XOR_in_op521 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_SHIFT_LEFT_in_op526 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_SHIFT_RIGHT_in_op528 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_U_SHIFT_RIGHT_in_op530 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_assignOp_in_assign567 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_var_in_assign569 = new BitSet(new long[]{0x02FDFC7FFB5743F4L});
    public static final BitSet FOLLOW_expr_in_assign571 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_op_in_binaryOp604 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_binaryOp608 = new BitSet(new long[]{0x02FDFC7FFB5743F4L});
    public static final BitSet FOLLOW_expr_in_binaryOp612 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_COND_OP_in_condOp645 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_condOp649 = new BitSet(new long[]{0x02FDFC7FFB5743F4L});
    public static final BitSet FOLLOW_expr_in_condOp653 = new BitSet(new long[]{0x02FDFC7FFB5743F4L});
    public static final BitSet FOLLOW_expr_in_condOp657 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_NOT_in_prefixOp690 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_prefixOp694 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_NEG_in_prefixOp715 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_prefixOp719 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_BIT_NEG_in_prefixOp740 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_prefixOp744 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_PRE_INC_in_prefixOp765 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_prefixOp769 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_PRE_DEC_in_prefixOp790 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_prefixOp794 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_POST_INC_in_postfixOp822 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_postfixOp826 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_POST_DEC_in_postfixOp847 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_postfixOp851 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_ARRAY_ACCESS_in_arrayAccess879 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_arrayAccess883 = new BitSet(new long[]{0x02FDFC7FFB5743F4L});
    public static final BitSet FOLLOW_expr_in_arrayAccess887 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_MEM_ACCESS_in_memAccess915 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_expr_in_memAccess917 = new BitSet(new long[]{0x0000000004000000L});
    public static final BitSet FOLLOW_ID_in_memAccess919 = new BitSet(new long[]{0x0000000000000008L});
    public static final BitSet FOLLOW_VAR_in_var946 = new BitSet(new long[]{0x0000000000000004L});
    public static final BitSet FOLLOW_ID_in_var948 = new BitSet(new long[]{0x0000000000000008L});

}